/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.perutaxi.datos;

import com.perutaxi.entidades.eCliente;
import com.perutaxi.entidades.eSolicitudReclamo;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 *
 * @author PeruTaxi
 */
public class dSolicitudReclamo implements Serializable {

    public static Date obtenerFechaActual() {
        Calendar calendario = Calendar.getInstance();
        return calendario.getTime();
    }

    public static eSolicitudReclamo inicializar() {
        eSolicitudReclamo solReclamo = new eSolicitudReclamo();
        solReclamo.setDniTaxista("");
        solReclamo.setCliente(new eCliente());
        solReclamo.setFechaReclamo(new Timestamp(obtenerFechaActual().getTime()));
        solReclamo.setMotivo("");
        solReclamo.setComentario("");
        solReclamo.setEstado("P");

        return solReclamo;
    }

    public static eSolicitudReclamo obtenerPorId(Long id) throws Exception {
        eSolicitudReclamo solReclamo = new eSolicitudReclamo();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM SOLICITUD_RECLAMO WHERE ID = " + id;
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                solReclamo.setId(rs.getLong(1));
                solReclamo.setDniTaxista(rs.getString(2));
                solReclamo.setCliente(dCliente.obtenerPorId(rs.getLong(3)));
                solReclamo.setFechaReclamo(rs.getTimestamp(4));
                solReclamo.setMotivo(rs.getString(5));
                solReclamo.setComentario(rs.getString(6));
                solReclamo.setEstado(rs.getString(7));
                solReclamo.setFechaIncidente(rs.getTimestamp(8));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return solReclamo;
    }

    public static List<eSolicitudReclamo> obtenerTodos() throws Exception {
        List<eSolicitudReclamo> lista = new ArrayList<eSolicitudReclamo>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM SOLICITUD_RECLAMO";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eSolicitudReclamo solReclamo = new eSolicitudReclamo();
                solReclamo.setId(rs.getLong(1));
                solReclamo.setDniTaxista(rs.getString(2));
                solReclamo.setCliente(dCliente.obtenerPorId(rs.getLong(3)));
                solReclamo.setFechaReclamo(rs.getTimestamp(4));
                solReclamo.setMotivo(rs.getString(5));
                solReclamo.setComentario(rs.getString(6));
                solReclamo.setEstado(rs.getString(7));
                solReclamo.setFechaIncidente(rs.getTimestamp(8));
                lista.add(solReclamo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static List<eSolicitudReclamo> obtenerSolReclamo(eSolicitudReclamo filtro) throws Exception {
        List<eSolicitudReclamo> lista = new ArrayList<eSolicitudReclamo>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM SOLICITUD_RECLAMO WHERE ID = ID";
        if (filtro.getId() != null && !filtro.getId().equals(0L)) {
            query += " AND ID = " + filtro.getId();
        } else {
            if (filtro.getEstado() != null && !filtro.getEstado().equals("") && !filtro.getEstado().equals("*")) {
                query += " AND ESTADO = '" + filtro.getEstado().toUpperCase() + "'";
            }
        }
        query += " ORDER BY ID DESC";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eSolicitudReclamo solReclamo = new eSolicitudReclamo();
                solReclamo.setId(rs.getLong(1));
                solReclamo.setDniTaxista(rs.getString(2));
                solReclamo.setCliente(dCliente.obtenerPorId(rs.getLong(3)));
                solReclamo.setFechaReclamo(rs.getTimestamp(4));
                solReclamo.setMotivo(rs.getString(5));
                solReclamo.setComentario(rs.getString(6));
                solReclamo.setEstado(rs.getString(7));
                solReclamo.setFechaIncidente(rs.getTimestamp(8));
                lista.add(solReclamo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static boolean guardar(eSolicitudReclamo reclamo) throws Exception {
        boolean retorno = true;
        Connection cnx = Conexion.getConexion();
        String query = "INSERT INTO SOLICITUD_RECLAMO VALUES (?,?,?,?,?,?,?,?)";
        try {
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setLong(1, reclamo.getId());
            ps.setString(2, reclamo.getDniTaxista().toUpperCase());
            ps.setLong(3, reclamo.getCliente().getId());
            ps.setTimestamp(4, reclamo.getFechaReclamo());
            ps.setString(5, reclamo.getMotivo().toUpperCase());
            ps.setString(6, reclamo.getComentario().toUpperCase());
            ps.setString(7, reclamo.getEstado().toUpperCase());
            ps.setTimestamp(8, reclamo.getFechaIncidente());
            ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            cnx.close();
        }

        return retorno;
    }

    public static boolean actualizar(eSolicitudReclamo reclamo) throws Exception {
        boolean retorno = true;
        Connection cnx = Conexion.getConexion();
        String query = "UPDATE SOLICITUD_RECLAMO SET DNI_TAXISTA = ?, CLIENTE = ?, MOTIVO = ?, COMENTARIO = ?, ESTADO = ?, FECHA_INCIDENTE = ? WHERE ID = ?";
        try {
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setString(1, reclamo.getDniTaxista().toUpperCase());
            ps.setLong(2, reclamo.getCliente().getId());
            ps.setString(3, reclamo.getMotivo().toUpperCase());
            ps.setString(4, reclamo.getComentario().toUpperCase());
            ps.setString(5, reclamo.getEstado().toUpperCase());
            ps.setTimestamp(6, reclamo.getFechaIncidente());
            ps.setLong(7, reclamo.getId());
            ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            cnx.close();
        }

        return retorno;
    }
}
